package com.gitee.dupe.authority.service;

import com.gitee.dolt.boot.service.SuperCacheService;
import com.gitee.dupe.authority.dto.UserSaveDTO;
import com.gitee.dupe.authority.dto.UserUpdateDTO;
import com.gitee.dupe.authority.entity.User;
import com.gitee.dupe.authority.enumeration.UserStateEnum;
import com.gitee.dupe.common.dto.UserGeneralDTO;

import java.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author LYH
 * @since 2020-06-30
 */
public interface IUserService extends SuperCacheService<User> {

    /**
     * 获取用户
     *
     * @param account 账号
     * @return
     */
    User getOneByAccount(String account);

    /**
     * 获取用户
     *
     * @param mobile
     * @return
     */
    User getOneByMobile(String mobile);

    /**
     * 获取用户
     *
     * @param email
     * @return
     */
    User getOneByEmail(String email);

    /**
     * 获取用户
     *
     * @param mobile 手机号
     * @return
     */
    List<User> findAllByMobile(String mobile);

    /**
     * 获取用户
     *
     * @param email 邮箱
     * @return
     */
    List<User> findAllByEmail(String email);

    /**
     * 用户详情
     *
     * @param id
     * @return
     */
    User getDetail(Long id);

    /**
     * 新增
     *
     * @param userSaveDTO
     * @return
     */
    User handlerSave(UserSaveDTO userSaveDTO);

    /**
     * 更新
     *
     * @param userUpdateDTO
     * @return
     */
    User handlerUpdate(UserUpdateDTO userUpdateDTO);

    /**
     * 授予角色
     *
     * @param id
     * @param roleIds
     */
    void grantRoles(Long id, Set<Long> roleIds);

    /**
     * 用户重置密码
     *
     * @param id
     * @param password
     */
    User resetPassword(Long id, String password);

    /**
     * 用户修改状态
     *
     * @param id
     * @param state
     */
    User changeState(Long id, UserStateEnum state);

    /**
     * 按权限标识查询用户
     *
     * @param idents 权限标识
     * @return
     */
    List<UserGeneralDTO> findAllByResourceIdents(List<String> idents);

    /**
     * id查询通用用户
     *
     * @param ids
     * @return
     */
    Map<Serializable, UserGeneralDTO> findUserRealNameItem(Set<Serializable> ids);
}
